rtables >= 0.2.0
File issues at:
https://github.com/RConsortium/rtrs-wg/issues
rtablesrtables - WhatR package:
rtables - WhyCornerstone piece of larger work to enable clinical trial work in R
rtables - Impact at Roche196 Internal Production Table Variant Templates Across 24 Categories
Production Table Templates ———————————————————————————————————————————————————————— Total 196 Adverse Event 54 Concomittant Medication 13 Demographics and Baseline 5 ECG Related 7 Lab Test 38 Other 39 Response-Related 10 Statistical Model Summary 24 Time To Event 6
rtables Usage In Practicertables is
rtables introductionrtables Is General But Informed By Pharma’s NeedsAdverse Events
By Arm, Biomarker Load and Grade
———————————————————————————————————————————————————————————————————————————————————————————————————————————
ARM A ARM B All Patients
Low High Low High Low High
(N=78) (N=68) (N=81) (N=73) (N=159) (N=141)
———————————————————————————————————————————————————————————————————————————————————————————————————————————
Patients with >0 events 62 (79.5%) 59 (86.8%) 78 (96.3%) 72 (98.6%) 140 (88.1%) 131 (92.9%)
Total events 1042 1018 571 569 1613 1587
--Any Grade-- 62 59 78 72 140 131
1 22 17 14 19 36 36
2 40 42 64 53 104 95
NERVOUS SYSTEM DISORDERS
--Any Grade-- 62 59 75 70 137 129
1 0 0 0 0 0 0
2 62 59 75 70 137 129
HEADACHE
--Any Grade-- 62 59 75 70 137 129
1 0 0 0 0 0 0
2 62 59 75 70 137 129
VASCULAR DISORDERS
--Any Grade-- 62 59 75 71 137 130
1 42 33 35 46 77 79
2 20 26 40 25 60 51
HYPOTENSION
--Any Grade-- 61 57 62 67 123 124
1 61 57 62 67 123 124
2 0 0 0 0 0 0
ORTHOSTATIC HYPOTENSION
--Any Grade-- 60 59 62 55 122 114
1 0 0 0 0 0 0
2 60 59 62 55 122 114
l <-basic_table() %>%
analyze("USUBJID", afun = s_events_patients)
build_table(l, ADAE2, alt_counts_df = ADSL2) all obs
—————————————————————————————————————
Patients with >0 events 271 (90.3%)
Total events 3200
l <-basic_table() %>%
split_cols_by("ARM") %>%
analyze("USUBJID", afun = s_events_patients)
build_table(l, ADAE2, alt_counts_df = ADSL2) ARM A ARM B
———————————————————————————————————————————————————
Patients with >0 events 121 (82.9%) 150 (97.4%)
Total events 2060 1140
l <-basic_table() %>%
split_cols_by("ARM") %>%
summarize_row_groups("USUBJID",
cfun = s_events_patients) %>%
analyze("AETOXGR",
afun = ids_per_grade,
show_labels = "hidden")
build_table(l, ADAE2, alt_counts_df = ADSL2) ARM A ARM B
———————————————————————————————————————————————————
Patients with >0 events 121 (82.9%) 150 (97.4%)
Total events 2060 1140
--Any Grade-- 121 150
1 39 33
2 82 117
l <-basic_table() %>%
split_cols_by("ARM") %>%
summarize_row_groups("USUBJID",
cfun = s_events_patients) %>%
split_rows_by("AEBODSYS",
child_labels = "visible",
indent_mod = -1,
split_fun = trim_levels_in_group("AEDECOD")) %>%
analyze("AETOXGR",
afun = ids_per_grade,
show_labels = "hidden")
build_table(l, ADAE2, alt_counts_df = ADSL2) ARM A ARM B
————————————————————————————————————————————————————
Patients with >0 events 121 (82.9%) 150 (97.4%)
Total events 2060 1140
NERVOUS SYSTEM DISORDERS
--Any Grade-- 121 145
1 0 0
2 121 145
VASCULAR DISORDERS
--Any Grade-- 121 146
1 75 81
2 46 65
l <-basic_table() %>%
split_cols_by("ARM") %>%
summarize_row_groups("USUBJID",
cfun = s_events_patients) %>%
split_rows_by("AEBODSYS",
child_labels = "visible",
indent_mod = -1,
split_fun = trim_levels_in_group("AEDECOD")) %>%
split_rows_by("AEDECOD") %>%
analyze("AETOXGR",
afun = ids_per_grade,
show_labels = "hidden")
build_table(l, ADAE2, alt_counts_df = ADSL2) ARM A ARM B
—————————————————————————————————————————————————————
Patients with >0 events 121 (82.9%) 150 (97.4%)
Total events 2060 1140
NERVOUS SYSTEM DISORDERS
HEADACHE
--Any Grade-- 121 145
1 0 0
2 121 145
VASCULAR DISORDERS
HYPOTENSION
--Any Grade-- 118 129
1 118 129
2 0 0
ORTHOSTATIC HYPOTENSION
--Any Grade-- 119 117
1 0 0
2 119 117
l <-basic_table() %>%
split_cols_by("ARM") %>%
summarize_row_groups("USUBJID",
cfun = s_events_patients) %>%
split_rows_by("AEBODSYS",
child_labels = "visible",
indent_mod = -1,
split_fun = trim_levels_in_group("AEDECOD")) %>%
summarize_row_groups("AETOXGR",
cfun = ids_per_grade) %>%
split_rows_by("AEDECOD") %>%
analyze("AETOXGR",
afun = ids_per_grade,
show_labels = "hidden")
build_table(l, ADAE2, alt_counts_df = ADSL2) ARM A ARM B
———————————————————————————————————————————————————————
Patients with >0 events 121 (82.9%) 150 (97.4%)
Total events 2060 1140
NERVOUS SYSTEM DISORDERS
--Any Grade-- 121 145
1 0 0
2 121 145
HEADACHE
--Any Grade-- 121 145
1 0 0
2 121 145
VASCULAR DISORDERS
--Any Grade-- 121 146
1 75 81
2 46 65
HYPOTENSION
--Any Grade-- 118 129
1 118 129
2 0 0
ORTHOSTATIC HYPOTENSION
--Any Grade-- 119 117
1 0 0
2 119 117
l <-basic_table() %>%
split_cols_by("ARM",
split_fun = add_overall_level("All Patients",
first = FALSE)) %>%
summarize_row_groups("USUBJID",
cfun = s_events_patients) %>%
split_rows_by("AEBODSYS",
child_labels = "visible",
indent_mod = -1,
split_fun = trim_levels_in_group("AEDECOD")) %>%
summarize_row_groups("AETOXGR",
cfun = ids_per_grade) %>%
split_rows_by("AEDECOD") %>%
analyze("AETOXGR",
afun = ids_per_grade,
show_labels = "hidden")
build_table(l, ADAE2, alt_counts_df = ADSL2) ARM A ARM B All Patients
——————————————————————————————————————————————————————————————————————
Patients with >0 events 121 (82.9%) 150 (97.4%) 271 (90.3%)
Total events 2060 1140 3200
NERVOUS SYSTEM DISORDERS
--Any Grade-- 121 145 266
1 0 0 0
2 121 145 266
HEADACHE
--Any Grade-- 121 145 266
1 0 0 0
2 121 145 266
VASCULAR DISORDERS
--Any Grade-- 121 146 267
1 75 81 156
2 46 65 111
HYPOTENSION
--Any Grade-- 118 129 247
1 118 129 247
2 0 0 0
ORTHOSTATIC HYPOTENSION
--Any Grade-- 119 117 236
1 0 0 0
2 119 117 236
l <-basic_table(title = "WILLOWWIND - Adverse Events By Grade",
prov_footer = wwind_prov_stamp()) %>%
split_cols_by("ARM",
split_fun = add_overall_level("All Patients",
first = FALSE)) %>%
summarize_row_groups("USUBJID",
cfun = s_events_patients) %>%
split_rows_by("AEBODSYS",
child_labels = "visible",
indent_mod = -1,
split_fun = trim_levels_in_group("AEDECOD")) %>%
summarize_row_groups("AETOXGR",
cfun = ids_per_grade) %>%
split_rows_by("AEDECOD") %>%
analyze("AETOXGR",
afun = ids_per_grade,
show_labels = "hidden")
build_table(l, ADAE2, alt_counts_df = ADSL2)WILLOWWIND - Adverse Events By Grade
——————————————————————————————————————————————————————————————————————
ARM A ARM B All Patients
——————————————————————————————————————————————————————————————————————
Patients with >0 events 121 (82.9%) 150 (97.4%) 271 (90.3%)
Total events 2060 1140 3200
NERVOUS SYSTEM DISORDERS
--Any Grade-- 121 145 266
1 0 0 0
2 121 145 266
HEADACHE
--Any Grade-- 121 145 266
1 0 0 0
2 121 145 266
VASCULAR DISORDERS
--Any Grade-- 121 146 267
1 75 81 156
2 46 65 111
HYPOTENSION
--Any Grade-- 118 129 247
1 118 129 247
2 0 0 0
ORTHOSTATIC HYPOTENSION
--Any Grade-- 119 117 236
1 0 0 0
2 119 117 236
——————————————————————————————————————————————————————————————————————
file: /path/to/WILLOWWIND/aet05.R *** data snapshot: 2022-04-28 *** user: gb123l <-basic_table(title = "WILLOWWIND - Adverse Events By Grade",
prov_footer = wwind_prov_stamp()) %>%
split_cols_by("ARM",
split_fun = add_overall_level("All Patients",
first = FALSE)) %>%
summarize_row_groups("USUBJID",
cfun = s_events_patients) %>%
split_rows_by("AEBODSYS",
child_labels = "visible",
indent_mod = -1,
split_fun = trim_levels_in_group("AEDECOD")) %>%
summarize_row_groups("AETOXGR",
cfun = ids_per_grade) %>%
split_rows_by("AEDECOD") %>%
analyze("AETOXGR",
afun = ids_per_grade,
show_labels = "hidden")
tbl_narrow <- build_table(l, ADAE2, alt_counts_df = ADSL2)
fnotes_at_path(tbl_narrow,
c("AEBODSYS", "NERVOUS SYSTEM DISORDERS",
"AEDECOD", "HEADACHE")) <- "Non-migraine"
tbl_narrowWILLOWWIND - Adverse Events By Grade
——————————————————————————————————————————————————————————————————————
ARM A ARM B All Patients
——————————————————————————————————————————————————————————————————————
Patients with >0 events 121 (82.9%) 150 (97.4%) 271 (90.3%)
Total events 2060 1140 3200
NERVOUS SYSTEM DISORDERS
--Any Grade-- 121 145 266
1 0 0 0
2 121 145 266
HEADACHE {1}
--Any Grade-- 121 145 266
1 0 0 0
2 121 145 266
VASCULAR DISORDERS
--Any Grade-- 121 146 267
1 75 81 156
2 46 65 111
HYPOTENSION
--Any Grade-- 118 129 247
1 118 129 247
2 0 0 0
ORTHOSTATIC HYPOTENSION
--Any Grade-- 119 117 236
1 0 0 0
2 119 117 236
——————————————————————————————————————————————————————————————————————
{1} - Non-migraine
——————————————————————————————————————————————————————————————————————
file: /path/to/WILLOWWIND/aet05.R *** data snapshot: 2022-04-28 *** user: gb123l <-basic_table(title = "WILLOWWIND - Adverse Events By Grade",
prov_footer = wwind_prov_stamp()) %>%
split_cols_by("ARM",
split_fun = add_overall_level("All Patients",
first = FALSE)) %>%
split_cols_by("BMRKR") %>%
summarize_row_groups("USUBJID",
cfun = s_events_patients) %>%
split_rows_by("AEBODSYS",
split_fun = trim_levels_in_group("AEDECOD"),
child_labels = "visible",
indent_mod = -1) %>%
summarize_row_groups("AETOXGR",
cfun = ids_per_grade) %>%
split_rows_by("AEDECOD") %>%
analyze("AETOXGR",
afun = ids_per_grade,
show_labels = "hidden")
tbl <- build_table(l, ADAE2, alt_counts_df = ADSL2)
fnotes_at_path(tbl,
c("AEBODSYS", "NERVOUS SYSTEM DISORDERS",
"AEDECOD", "HEADACHE")) <- "Non-migraine"
tbl
WILLOWWIND - Adverse Events By Grade
———————————————————————————————————————————————————————————————————————————————————————————————————————————
ARM A ARM B All Patients
Low High Low High Low High
———————————————————————————————————————————————————————————————————————————————————————————————————————————
Patients with >0 events 62 (79.5%) 59 (86.8%) 78 (96.3%) 72 (98.6%) 140 (88.1%) 131 (92.9%)
Total events 1042 1018 571 569 1613 1587
NERVOUS SYSTEM DISORDERS
--Any Grade-- 62 59 75 70 137 129
1 0 0 0 0 0 0
2 62 59 75 70 137 129
HEADACHE {1}
--Any Grade-- 62 59 75 70 137 129
1 0 0 0 0 0 0
2 62 59 75 70 137 129
VASCULAR DISORDERS
--Any Grade-- 62 59 75 71 137 130
1 42 33 35 46 77 79
2 20 26 40 25 60 51
HYPOTENSION
--Any Grade-- 61 57 62 67 123 124
1 61 57 62 67 123 124
2 0 0 0 0 0 0
ORTHOSTATIC HYPOTENSION
--Any Grade-- 60 59 62 55 122 114
1 0 0 0 0 0 0
2 60 59 62 55 122 114
———————————————————————————————————————————————————————————————————————————————————————————————————————————
{1} - Non-migraine
———————————————————————————————————————————————————————————————————————————————————————————————————————————
file: /path/to/WILLOWWIND/aet05.R *** data snapshot: 2022-04-28 *** user: gb123
Table Structure
l <-basic_table(title = "WILLOWWIND - Adverse Events By Grade",
prov_footer = wwind_prov_stamp()) %>%
split_cols_by("ARM",
split_fun = add_overall_level("All Patients",
first = FALSE)
) %>%
split_cols_by("BMRKR") %>%
summarize_row_groups("USUBJID",
cfun = s_events_patients) %>%
split_rows_by("AEBODSYS",
split_fun = trim_levels_in_group("AEDECOD"),
child_labels = "visible",
indent_mod = -1) %>%
summarize_row_groups("AETOXGR",
cfun = ids_per_grade) %>%
split_rows_by("AEDECOD") %>%
analyze("AETOXGR",
afun = ids_per_grade,
show_labels = "hidden")
tbl <- build_table(l, ADAE2, alt_counts_df = ADSL2) Business Logic
l <-basic_table(title = "WILLOWWIND - Adverse Events By Grade",
prov_footer = wwind_prov_stamp()) %>%
split_cols_by("ARM",
split_fun = add_overall_level("All Patients",
first = FALSE)
) %>%
split_cols_by("BMRKR") %>%
summarize_row_groups("USUBJID",
cfun = s_events_patients) %>%
split_rows_by("AEBODSYS",
split_fun = trim_levels_in_group("AEDECOD"),
child_labels = "visible",
indent_mod = -1) %>%
summarize_row_groups("AETOXGR",
cfun = ids_per_grade) %>%
split_rows_by("AEDECOD") %>%
analyze("AETOXGR",
afun = ids_per_grade,
show_labels = "hidden")
tbl <- build_table(l, ADAE2, alt_counts_df = ADSL2)l <-basic_table() %>%
split_cols_by("ARM") %>%
summarize_row_groups("USUBJID",
cfun = s_events_patients) %>%
analyze("AETOXGR",
afun = ids_per_grade,
show_labels = "hidden")
tbl <- build_table(l, ADAE2, alt_counts_df = ADSL2)
tbl
ARM A ARM B
———————————————————————————————————————————————————
Patients with >0 events 121 (82.9%) 150 (97.4%)
Total events 2060 1140
--Any Grade-- 121 150
1 39 33
2 82 117
## for now helper I wrote, coming to rtables API soon
set_format_at_path(tbl, c("root",
"@content", "pat_count"),
format = "xx (xx.xx%)")
ARM A ARM B
—————————————————————————————————————————————————————
Patients with >0 events 121 (82.88%) 150 (97.40%)
Total events 2060 1140
--Any Grade-- 121 150
1 39 33
2 82 117
set_format_at_path(tbl, c("root",
"@content", "pat_count"),
format = "xx (xx.%)")
ARM A ARM B
———————————————————————————————————————————————
Patients with >0 events 121 (83%) 150 (97%)
Total events 2060 1140
--Any Grade-- 121 150
1 39 33
2 82 117
pagtbl <- paginate_table(tbl_narrow, lpp = 35) pagtbl[[1]]
WILLOWWIND - Adverse Events By Grade
———————————————————————————————————————————————————————————————————
ARM A ARM B All Patients
———————————————————————————————————————————————————————————————————
Patients with >0 events 121 (82.9%) 150 (97.4%) 271 (90.3%)
Total events 2060 1140 3200
NERVOUS SYSTEM DISORDERS
--Any Grade-- 121 145 266
1 0 0 0
2 121 145 266
HEADACHE {1}
--Any Grade-- 121 145 266
1 0 0 0
2 121 145 266
VASCULAR DISORDERS
--Any Grade-- 121 146 267
1 75 81 156
2 46 65 111
HYPOTENSION
--Any Grade-- 118 129 247
1 118 129 247
2 0 0 0
———————————————————————————————————————————————————————————————————
{1} - Non-migraine
———————————————————————————————————————————————————————————————————
file: /path/to/WILLOWWIND/aet05.R *** data snapshot: 2022-04-28 *** user: gb123pagtbl[[2]]
WILLOWWIND - Adverse Events By Grade
——————————————————————————————————————————————————————————————————————
ARM A ARM B All Patients
——————————————————————————————————————————————————————————————————————
Patients with >0 events 121 (82.9%) 150 (97.4%) 271 (90.3%)
Total events 2060 1140 3200
VASCULAR DISORDERS
--Any Grade-- 121 146 267
1 75 81 156
2 46 65 111
ORTHOSTATIC HYPOTENSION
--Any Grade-- 119 117 236
1 0 0 0
2 119 117 236
——————————————————————————————————————————————————————————————————————
file: /path/to/WILLOWWIND/aet05.R *** data snapshot: 2022-04-28 *** user: gb123l <-basic_table(title = "WILLOWWIND - Adverse Events By Grade",
prov_footer = wwind_prov_stamp()) %>%
split_cols_by("ARM",
split_fun = add_overall_level("All Patients",
first = FALSE)) %>%
split_rows_by("BMRKR", page_by=TRUE) %>%
split_rows_by("AEBODSYS",
split_fun = trim_levels_in_group("AEDECOD"),
child_labels = "visible",
indent_mod = -1) %>%
analyze("AETOXGR",
afun = ids_per_grade,
show_labels = "hidden")
tbl <- build_table(l, ADAE2, alt_counts_df = ADSL2)
ptbl <- paginate_table(tbl, lpp = 35)
ptbl[[1]]
WILLOWWIND - Adverse Events By Grade
BMRKR: Low
———————————————————————————————————————————————————————
ARM A ARM B All Patients
———————————————————————————————————————————————————————
NERVOUS SYSTEM DISORDERS
--Any Grade-- 62 75 137
1 0 0 0
2 62 75 137
VASCULAR DISORDERS
--Any Grade-- 62 75 137
1 42 35 77
2 20 40 60
———————————————————————————————————————————————————————
file: /path/to/WILLOWWIND/aet05.R *** data snapshot: 2022-04-28 *** user: gb123ptbl[[2]]
WILLOWWIND - Adverse Events By Grade
BMRKR: High
———————————————————————————————————————————————————————
ARM A ARM B All Patients
———————————————————————————————————————————————————————
NERVOUS SYSTEM DISORDERS
--Any Grade-- 59 70 129
1 0 0 0
2 59 70 129
VASCULAR DISORDERS
--Any Grade-- 59 71 130
1 33 46 79
2 26 25 51
———————————————————————————————————————————————————————
file: /path/to/WILLOWWIND/aet05.R *** data snapshot: 2022-04-28 *** user: gb123rtables Is Not Faster HorsesUpper Management
NEST Leadership
rtables Teamrtables doesn’t end up where it is now.
rtablesrtables